package fr.coupedumonde2014.app.activity;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.google.android.gms.plus.PlusClient;

import fr.coupedumonde2014.app.R;
import fr.coupedumonde2014.app.Task.ConnecterTask;
import fr.coupedumonde2014.app.Task.LoadTask;
import fr.coupedumonde2014.app.authentification.GPlus;
import fr.coupedumonde2014.app.modele.Utilisateur;
import fr.coupedumonde2014.app.notification.GcmInitializer;
import fr.coupedumonde2014.app.service.IBetService;
import fr.coupedumonde2014.app.session.SessionManager;


public class ConnexionActivity extends Activity implements View.OnClickListener, GcmInitializer.GcmInitialiserCallBack, LoadTask.LoadTaskCallback, ConnecterTask.ConnecterTaskCallback, GPlus.GPlusDelegate {

    View connexion;

    SessionManager session;
    GPlus gplus;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_connexion);

        session = new SessionManager(this);

        gplus = new GPlus(this,this);

        charger();

        remplir();
        //ajouterListeners();
    }

    public void getGmail(){
        String marketAssociatedEmailId = "";
        Account[] accounts = AccountManager.get(this).getAccountsByType("com.google");
        if(accounts.length > 0) {
            marketAssociatedEmailId = accounts[0].name;
            connecter(marketAssociatedEmailId);
        }

    }

    public void connecter(String email){
        new ConnecterTask(this).execute(email, generatePassword(email));
    }

    @Override
    public void onConnected(PlusClient client) {
        connecter(client.getAccountName());
    }

    public String generatePassword(String s){
        return "caca"+s+"caca";
        /*
        try {
            java.security.MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
            digest.reset();
            digest.update(s.getBytes("UTF-8"));
            return new String(digest.digest());
        }catch (Exception e){
            e.printStackTrace();
            return s;
        }*/
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        gplus.onActivityResult(requestCode, resultCode, data);
    }

    public void charger() {
        connexion = findViewById(R.id.connexion);
    }

    public void remplir() {

        if (session.getProfile() != null) {
            connexion.setVisibility(View.GONE);
            connexion.postDelayed(new Runnable() {
                @Override
                public void run() {
                    connecter();
                }
            }, 3000);

        }
        else
            ajouterListeners();
    }

    public void connecter() {
        new LoadTask(this).execute(session.getProfile().getId().toString());
        new GcmInitializer(this, this).enregistrerCloudMessaginClient();
    }

    @Override
    public void onGcmInitialised(String token) {
        Log.d("JETON", token);
        new SendJetonTask().execute(session.getProfile().getId(), token);
    }

    public void ajouterListeners() {
        connexion.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {

        switch (view.getId()) {

            case R.id.connexion:
                lancerInscription();
                break;
        }
    }

    private void lancerInscription() {
        //gplus.connect();
        getGmail();
    }

    public void connecter(Utilisateur utilisateur) {
        session.setProfile(utilisateur);
        session.setConnecte(true);

        connecter();
    }

    @Override
    public void onLoadTask() {
        finish();
        startActivity(new Intent(ConnexionActivity.this, ListMatch.class));
    }

    @Override
    public void onLoadTaskErreur() {
        Toast.makeText(ConnexionActivity.this, R.string.erreur_reseau, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onConnecter(Utilisateur utilisateur) {
        connecter(utilisateur);
    }

    @Override
    public void onConnecterErreur() {
        onLoadTaskErreur();
    }




    public class SendJetonTask extends AsyncTask<String, Void, Void> {
        @Override
        protected Void doInBackground(String... data) {
            try {
                IBetService service = new IBetService();
                service.envoyerJeton(data[0], data[1]);
            } catch (IBetService.NetworkException e) {
                e.printStackTrace();
            }
            return null;
        }
    }








    //---------------------------------------------------------------



}
